package site.jlopen.kuscia.service.data;

import java.util.List;
import java.util.Map;

import javax.annotation.Nullable;

import site.jlopen.kuscia.entity.GrpcApiInfo;
import site.jlopen.kuscia.model.DatatableSchema;
import site.jlopen.kuscia.model.data.KusciaDataVo;

public abstract class AbstractDataManager {

    public static final String DATA_TYPE_TABLE = "table";

    public static final String DATA_VENDOR_MANUAL = "manual";

    public static final String DATA_VENDOR_GRANT = "grant";
	
    /**
    * <strong>创建数据对象</strong>
    * @Title: createDomainData
    * @Description: <p>TODO</p>
    * @param apiInfo
    * @param datasourceId 数据源Id
    * @param domainId 节点Id
    * @param tableName 用户提供的表名
    * @param realName 实际存储的文件的名称（文件全地址）
    * @param description 表描述
    * @param attributes  自定义属性
    * @param datatableSchemaList 表结构
    * @return <p>TODO</p>
    * String
    * @author ChenJiaLu
    * @date 2025年2月20日 16:47:17
     */
	public abstract String createDomainData(GrpcApiInfo apiInfo, 
			String datasourceId,
            String domainId,
            String tableName,
            String realName,
            String description,
            Map<String, String> attributes,
            List<DatatableSchema> datatableSchemaList
    );

	/**
	* <strong>更新数据对象</strong>
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract void updateDomainData(GrpcApiInfo apiInfo, 
			String datasourceId,
			String domainId,
			String domainDataId,
            String tableName,
            String realName,
            String description,
            Map<String, String> attributes,
            List<DatatableSchema> datatableSchemaList
    );

	/**
	* <strong>删除数据对象</strong>
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract void deleteDomainData(GrpcApiInfo apiInfo, String nodeCodeId, String domaindataId);

	/**
	* <strong>查询数据对象</strong>
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract String queryDomainData(GrpcApiInfo apiInfo, String nodeId, String domaindataId);

	/**
	* <strong>查询数据对象</strong>
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract KusciaDataVo queryDomainDataVo(GrpcApiInfo apiInfo, String nodeId, String domaindataId);

	/**
	* <strong>批量查询数据对象</strong>
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract void batchQueryDomainData(GrpcApiInfo apiInfo);

	/**
	* <strong>列出数据对象</strong>
	* vendor 可选，将用作列出域数据的筛选条件
	* @author ChenJiaLu
	* @date 2024年7月13日 下午2:37:03
	 */
	public abstract void listDomainData(GrpcApiInfo apiInfo, String nodeId, @Nullable String vendor);
}
